import requests
from lxml import etree
import os
"""
思路流程：
1.抓包
2.判断数据（客户需要的数据）的加载方式
3.两种情况：需要翻页/不需要翻页
    (1)判断翻页：翻页过程（大部分是GET，POST请求的翻页非常少）
    (2)翻页参数显示在地址中(GET请求)
"""


class Spider():
    def __init__(self):
        """
        爬虫第一步
        """
        # 准备地址
        self.start_url = 'https://movie.douban.com/top250?start={}&filter='
        # 请求头
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
        }
        print("444444444444")
        # 保存文件夹的创建
        self.os_path = os.getcwd() + '/豆瓣电影/'
        if not os.path.exists(self.os_path):
            os.mkdir(self.os_path)
    def get_data(self):
        """
        爬虫原理第二步：发送请求，获取响应
        """
        # for循环模拟翻页
        for i in range(10):
            url = self.start_url.format(i * 25)
            # print(url)
            response = requests.get(url=url, headers=self.headers)
            print(response.status_code)
            # return response
            """类中，函数方法的调用"""
            self.parse_data(response)
            # break

    def parse_data(self, response):
        """
        爬虫原理第三步：解析响应，数据提取
        """
        # 提取数据 //ol[@class="grid_view"]/li/div/div[2]/div[1]/a/span[1]/text()
        # 提取所有电影的标签对象
        html = etree.HTML(response.content)
        li_list = html.xpath('//ol[@class="grid_view"]/li')
        # print(li_list)
        # print(len(li_list))
        # for 遍历标签对象列表
        for li in li_list:
            # 标题
            name = ''.join(li.xpath('./div/div[2]/div[1]/a/span[1]/text()'))
            # 经典台词
            text = ''.join(li.xpath('./div/div[2]/div[2]/p[2]/span/text()'))
            # print(name, text)
            # print('\n')
            self.save_data(name,text)


    def save_data(self, name, text):
        """
        爬虫原理第四步：保存数据
        """
        with open(self.os_path + '豆瓣电影排行榜.txt', 'a+', encoding='utf-8') as f:
            f.write(name + '\n')
            f.write(text + '\n')
            f.write('\n')

        print(f"{name}电影保存成功")



if __name__ == '__main__':
    a = Spider()
    a.get_data()
